push-์ฌ๊ท-pop-์ฌ๊ท vs push-์ฌ๊ท-pop
function solution1(n) {
const answer = [];
function isSafe(queens,row,col) {
for(const comp of queens){
const r = comp[0];
const c = comp[1];
if(row===r||col===c|| Math.abs(row-r)===Math.abs(col-c)){ // Math.abs์์ผ์
return false;
}
}
return true;
}
function solve(queens,row){
if(row===n){
answer.push([...queens]);
return;
}
for(let i=0;i<n;i++){
const flag = isSafe(queens,row,i);
if(flag){
queens.push([row,i]);
solve(queens,row+1);
queens.pop();
//solve(queens.row+1); //์ด๊ฑฐ ๋ฃ์์ผ๋ฉด ์๋์.
}
}
}
solve([],0);
console.log(answer);
return answer.length;
}
// console.log("N-Queens (4):", solution1(4));
console.log("N-Queens (8):", solution1(8));
N-Queen ๋ฌธ์
๋ฐฑํธ๋ํน ๋ฌธ์ ๋ฅผ ํ๋ค๋ณด๋ฉด ์ธ์ ๋
์ฌ๊ทํจ์ ํ์ pop()
ํด์ ๋ฃ์๋๊ฑธ ๋บ ํ์ ๋ค์ ์ฌ๊ทํจ์๋ฅผ ๋๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์๊ณ , (ใ
push-์ฌ๊ท-pop-์ฌ๊ท)
์ด์ฉ๋๋ push-์ฌ๊ท-pop ๊น์ง๋ง ํ๋ค.
ํ์ ๋ ธ๋ ํ์
์์ด์์ฑ๊ณผ ๊ฐ์ด ํ์ ๋ ธ๋๋ค์ ๋ชจ๋ ํ์ํด์ผ ํ ๋๋ push-์ฌ๊ท-pop-์ฌ๊ท. ๋ชจ๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ฅผ ํ์ํด์ผํ ๋.
๊ทธ๋ฐ๋ฐ ๋ด๊ฐ ์์ N-Queen ๋ฌธ์ ๋ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๋ ๋ฌธ์ ์๋๊ฐ?
for๋ฌธ์ผ๋ก ๋ฐ๋ณต์ ๋ณด์ฅํด์คฌ๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง ์ฌ๊ทํจ์ ํธ์ถ์ด ์์ด๋ ๋๋ค.
function solveRecursive(queens, row, col) {
if (row === n) {
answer.push([...queens]);
return;
}
if (col >= n) return;
if (isSafe(queens, row, col)) {
queens.push([row, col]);
solveRecursive(queens, row+1, 0);
queens.pop();
}
solveRecursive(queens, row, col+1);
}
์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ด๊ฐ ์๋ ์ดํดํ๊ณ ์๋ ์ฌ๊ทํจ์์ ํํ๊ฐ ๋๋ค.